home *** CD-ROM | disk | FTP | other *** search
- MIDI SAMPLE DUMP STANDARD
-
- 1) INTRODUCTION
-
- The MIDI SDS was adopted in January 1986 by the MIDI
- Manufacturers Association and the Japanese MIDI Standards Committee.
- The SDS defines the standard method for transfer of sound sample data
- between MIDI-equipped devices. Sample dumps may be accomplished with
- either an 'open loop' or 'closed loop' system. The open loop method
- simply involves the straight dump of all sample data from its source
- to the destination, with no timeouts, packet acknowledgements, or any
- other form of handshaking, much as in the manner of a sysex bulk dump,
- usually intiated at the source. The closed loop method allows the use
- of handshaking messages between the dump source and destination, and
- usually places the dump process under the control of the slave, to
- allow it time to process the incoming data as necessary. As with any
- standard, it can not be assumed that a device adheres to it unless the
- accompanying documentation specifically indicates it. Even then, it is
- best to check its conformity with non-critical data.
-
- 2) SPEC: SAMPLE DUMP FORMATS
-
- DUMP HEADER:
-
- F0 7E cc 01 ss ss ee ff ff ff gg gg gg hh hh hh ii ii ii jj F7
-
- where
-
- cc = channel number
- ss ss = sample number (LSB first)
- ee = sample format (number of significant bits; 8->28)
- ff ff ff = sample period (1/sample rate) in nanoseconds (LSB first)
- gg gg gg = sample length, in words
- hh hh hh = sustain loop start point (word number) (LSB first)
- ii ii ii = sustain loop end point (word number) (LSB first)
- jj = loop type (00:forwards only; 01:alternating)
-
- DATA PACKET:
-
- F0 7E cc 02 kk <120 bytes> mm F7
-
- where
-
- cc = channel number
- kk = running packet count (00->7F)
- mm = checksum (XOR of 7E, cc, 02, kk <120 bytes>)
-
- The total size of a data packet is 127 bytes. This is to avoid
- overflow of the MIDI input buffer of a device that may want to receive
- an entire packet before processing it.
- A data packet consists of its own header, a packet number, 120
- bytes of data, a checksum, and an EOX. The packet number begins at 00
- and increments with each new packet. It resets to 00 after it reaches
- 7F, and continues counting. The packet number is used by the receiver
- to distinguish between a new data packet, or a resend of a previous
- packet. The packet number is followed by 120 bytes of data, which form
- 60, 40, or 30 words (MSB first for multiword samples), depending on
- the length of a single data sample.
- Each data byte hold seven bits, with the msb in each byte set to
- 0, in order to conform to the requirements of MIDI data transmission.
- Information is left justified within the 7-bit bytes, and unused bits
- are filled with 0.
- Example: Assume a data point in the memory of a 16-bit sampler,
- with the value 87E5. In binary, that would be
-
- 1000 0111 1110 0101
-
- and would be encoded as the following MIDI data stream:
-
- 01000011 01111001 00100000
-
- The checksum is the running XOR of all the data after the SYSEX
- byte, up to but not including the checksum itself.
-
- 3) SPEC: SAMPLE DUMP MESSAGES
-
- DUMP REQUEST:
-
- F0 7E cc 03 ss ss F7
-
- where
-
- cc = channel number
- ss ss = sample number requested (LSB first)
-
- Upon receiving the request, the sampler checks the sample number
- to see if it is within legal range. If it is not, the request is
- ignored. If it is, the sample dump is started. One packet at a time is
- sent, under control of the handshaking messages outlined below.
-
- HANDSHAKING MESSAGES:
-
- For all below:
-
- cc = channel number
- pp = packet number
-
- Packet numbers are included in the handshaking messages to
- accomodate machines that have the intelligence to re-transmit specific
- packets after an entire dump is finished, or if synchronization is
- lost.
-
- ACK : F0 7E cc 7F pp F7
-
- Means last packet was recieved correctly (checksum OK, etc),
- please send next one. Packet number is packet being acknowledged as
- correct.
-
- NAK : F0 7E cc 7E pp F7
-
- Means last packet not received correctly, please send again.
- Packet number is packet being rejected.
-
- CANCEL : F0 7E cc 7D pp F7
-
- Means abort dump immediately. Packet number is packet on which
- abort occurs.
-
- WAIT : F0 7E cc 7C pp F7
-
- Means pause dump indefinitely, until next message is sent. Allows
- the unit recieving the dump to perform other functions (disk access,
- etc), before receiving the remainder of the dump. The next message it
- sends (eg ACK, ABORT) will determine if the dump continues or aborts.
-
- 4) DUMP PROCEDURE: MASTER (DUMP SOURCE)
-
- Once a dump has been requested, either via MIDI or through the
- front panel, the DUMP HEADER is sent. After sending the header, the
- master must time out for at least two seconds, to allow the receiver
- to decide if it will accept this sample (has enough memory, etc).
- If it receives a CANCEL, within this time, it should abort
- immediately. If it receives an CAK, it will start sending packets
- immediately. If it receives a WAIT, it pauses until another message is
- received, and then processes that mesage normally. If nothing is
- recieved within the timeout, an open loop is assumed, and the dump
- starts with the first packet.
- After sending each packet, the master should time out for at
- least 20 milliseconds and watch its MIDI In. If an ACK is received, it
- sends the next packet immediately. If it receives an NAK, and the
- packet number matches the number of the last packet sent, it resend
- that packet If the packet numbers don't match, and the device is
- incapable of sending packets out of order, the NAK will be ignored.
- If a WAIT is received, the master should watch its MIDI In port
- indefinitely for another ACK, NAK, or CANCEL message, which it should
- then process normally.
- If no messages are received within 20 milliseconds of the
- transmission of a packet, the master may assume an open loop
- configuration, and send the next packet.
- This process continues until there are less than 121 data bytes
- to send. The final packet will still consist of 120n bytes, regardless
- of how many significant bytes actually remain, and the unused bytes
- will be filled with zeroes. The receiver should handshake after
- receiving the last packet.
-
- 5) DUMP PROCEDURE: SLAVE (DUMP DESTINATION)
-
- When receiving a sample dump, a device should keep a running
- checksum during reception. If its checksum matches the checksum in the
- data packet, it will send an ACK and wait for the next packet. If it
- does not match, it will send an NAK containing the number of the
- packet that caused the error, and wait for the next packet. If, after
- sending an NAK, the packet number of the next packet doesn't match the
- previous packet number (the one that was NAK'd), and the unit is not
- capable of accepting packets out of order, the error is ignored and
- the dump continues as if the checksums had matched.
- If a receiver runs out of memory before the dumpo is completed,
- it should send a CANCEL to stop the dump.
-
- 6) SDS OVERVIEW
-
- SAMPLE DUMP DATA FORMAT: DUMP HEADER:
-
- Sysex
- ID: Universal Non-Real Time
- Channel Number
- Sub ID: Header
- Sample Number (2 bytes, LSB first)
- Sample Format
- Sample Period (3 bytes, LSB first)
- Sample Length (3 bytes, LSB first)
- Sustain Loop Start Point (3 bytes, LSB first)
- Sustain Loop End Point (3 bytes, LSB first)
- Loop Type
- Eox
-
- SAMPLE DUMP DATA FORMAT: DATA PACKET:
-
- Sysex
- ID: Universal Non-Real Time
- Channel Number
- Sub ID: Data Packet
- Packet Number
- Sample Data (120 bytes)
- Checksum
- Eox
-
- SAMPLE DUMP MESSAGES: DUMP REQUEST:
-
- Sysex
- ID: Universal Non-Real Time
- Channel Number
- Sub ID: Dump Request
- Sample Number (2 bytes, LSB first)
- Eox
-
- SAMPLE DUMP MESSAGES: HANDSHAKING FLAGS:
-
- Sysex
- ID: Universal Non-Real Time
- Channel Number
- Sub ID: ACK or NAK or CANCEL or WAIT
- Packet Number
- Eox
-
-
-
-
-
-
-
-
- % ====== Internet headers and postmarks (see DECWRL::GATEWAY.DOC) ======
- Received: by decpa.pa.dec.com; id AA00121; Fri, 21 Dec 90 17:20:39 -0800
- Received: by decwrl.dec.com; id AA29910; Fri, 21 Dec 90 17:11:23 -0800
- Message-Id: <9012220111.AA29910@decwrl.dec.com>
- Received: from AUVM.BITNET by CUNYVM.CUNY.EDU (IBM VM SMTP R1.2.2MX) with BSMTP id 7293; Fri, 21 Dec 90 20:10:13 EST
- Received: by AUVM (Mailer R2.07) id 6660; Fri, 21 Dec 90 20:09:51 EST
- Date: Fri, 21 Dec 90 20:09:49 EST
- From: Revised List Processor (1.6e) <LISTSERV%AUVM.BITNET@CUNYVM.CUNY.EDU>
- Subject: File: "SDSFMT MIDISPEC" being sent to you
- To: SKIVT::hearn
-